'''
什么是迭代器?什么是生成器?两者有什么区别?

迭代器可以用来表示一个数据流，提供了数据的惰性返回功能(只有使用next方法调用才会返回值)
迭代器侧重于提供数据的惰性返回功能。生成器侧重于指令的惰性返回功能。

协程的实现原理.
asyncio实现原理
用协程实现一个计算平均数的函数
编写一个asyncio异步程序
扩展: 了解aiohttp异步请求网址
'''
def avg():
    total = 0
    length = 0
    while True:
        try:
            value = yield total / length
        except ZeroDivisionError:
            value = yield 0
        total += value
        length += 1
my_avg = avg()
print(next(my_avg))
print(my_avg.send(1))
print(my_avg.send(2))
print(my_avg.send(3))

import time,asyncio

async def say_hello():
    await asyncio.sleep(0.7)
    print(f"您好，当前时间是：{time.time()}")

def start_say_hello():
    loop = asyncio.get_event_loop()
    task_array = []
    for i in range(7):
        task_array.append(say_hello())
    loop.run_until_complete(asyncio.wait(task_array))
    loop.close()

if __name__ =='__main__':
    start_say_hello()
